/**
	* Copyright (c) minuteproject, minuteproject@gmail.com
	* All rights reserved.
	* 
	* Licensed under the Apache License, Version 2.0 (the "License")
	* you may not use this file except in compliance with the License.
	* You may obtain a copy of the License at
	* 
	* http://www.apache.org/licenses/LICENSE-2.0
	* 
	* Unless required by applicable law or agreed to in writing, software
	* distributed under the License is distributed on an "AS IS" BASIS,
	* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
	* See the License for the specific language governing permissions and
	* limitations under the License.
	* 
	* More information on minuteproject:
	* twitter @minuteproject
	* wiki http://minuteproject.wikispaces.com 
	* blog http://minuteproject.blogspot.net
	* 
*/
/**
	* template reference : 
	* - name : OpenxavaDomainObjectUML
	* - file name : DomainObjectUMLJPAAnnotationOXAnnotationV4.vm
*/
package sistema_oficial.sistema_oficial.domain.sistemaoficial;

//MP-MANAGED-ADDED-AREA-BEGINNING @import@
//MP-MANAGED-ADDED-AREA-ENDING @import@
import java.sql.*;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;
import java.util.Set;
import java.util.HashSet;

import javax.persistence.*;
import org.openxava.annotations.*;

import calculators.*;

import sistema_oficial.sistema_oficial.domain.sistemaoficial.Cheque;
import sistema_oficial.sistema_oficial.domain.sistemaoficial.CobroFactura;
import sistema_oficial.sistema_oficial.domain.sistemaoficial.Entrada;
import sistema_oficial.sistema_oficial.domain.sistemaoficial.OtroEgreso;
import sistema_oficial.sistema_oficial.domain.sistemaoficial.OtroIngreso;
import sistema_oficial.sistema_oficial.domain.sistemaoficial.PagoFactura;
import sistema_oficial.sistema_oficial.domain.sistemaoficial.PagoSalario;
import sistema_oficial.sistema_oficial.domain.sistemaoficial.Salida;
import sistema_oficial.sistema_oficial.domain.sistemaoficial.TipoComprobante;

/**
 *
 * <p>Title: Comprobante</p>
 *
 * <p>Description: Domain Object describing a Comprobante entity</p>
 *
 */
@Entity (name="Comprobante")
@Table (name="comprobante")
@Views({
//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @view-base-comprobante@
	@View(
		name="base",
		members=
        "" 	
        + "identificador  ; "
        + "numero  ; "
        + "fecha  ; "
        + "total  ; "
        + "tipoComprobanteIdentificador  ; "
		),
//MP-MANAGED-UPDATABLE-ENDING
	@View(
		name="Create", 
		extendsView="base"
	),
	@View(
		name="Update", 
		extendsView="base",
        members=
          "" 	
	    + "cheque { chequeComprobanteViaComprobanteIdentificador };" 
	    + "cobroFactura { cobroFacturaComprobanteViaComprobanteIdentificador };" 
	    + "entrada { entradaComprobanteViaComprobanteIdentificador };" 
	    + "otroEgreso { otroEgresoComprobanteViaComprobanteIdentificador };" 
	    + "otroIngreso { otroIngresoComprobanteViaComprobanteIdentificador };" 
	    + "pagoFactura { pagoFacturaComprobanteViaComprobanteIdentificador };" 
	    + "pagoSalario { pagoSalarioComprobanteViaComprobanteIdentificador };" 
	    + "salida { salidaComprobanteViaComprobanteIdentificador };" 
	),
	@View(extendsView="base",
        members=
          "" 	
	    ),
    @View(name="comprobanteDEFAULT_VIEW", 
	   members=
          " identificador ;" 	
        + "numero  ; "
        + "fecha  ; "
        + "total  ; "
	),
//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @view-reference-comprobante@
    @View(name="reference", 
       extendsView="comprobanteDEFAULT_VIEW"
//MP-MANAGED-UPDATABLE-ENDING
    )
})

@Tabs({
@Tab(
properties=
     " numero "
    +",  fecha "
    +",  total "
)
,
@Tab(
name = "ComprobanteTab",
properties=
     " numero "
    +",  fecha "
    +",  total "
)
,
@Tab(
name = "ComprobanteTabWithRef",
properties=
     " numero "
    +",  fecha "
    +",  total "
)
})
//MP-MANAGED-ADDED-AREA-BEGINNING @class-annotation@
//MP-MANAGED-ADDED-AREA-ENDING @class-annotation@
public class Comprobante {

    @Hidden @Id @Column(name="identificador" )
    private Integer identificador; 

//MP-MANAGED-ADDED-AREA-BEGINNING @numero-field-annotation@
//MP-MANAGED-ADDED-AREA-ENDING @numero-field-annotation@

//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @ATTRIBUTE-numero@
    @Column(name="numero",  length=50, nullable=false,  unique=false)
    @Required
    private String numero;	
//MP-MANAGED-UPDATABLE-ENDING

//MP-MANAGED-ADDED-AREA-BEGINNING @fecha-field-annotation@
//MP-MANAGED-ADDED-AREA-ENDING @fecha-field-annotation@

//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @ATTRIBUTE-fecha@
    @Column(name="fecha",   nullable=false,  unique=false)
    @Required
    private Timestamp fecha;	
//MP-MANAGED-UPDATABLE-ENDING

//MP-MANAGED-ADDED-AREA-BEGINNING @total-field-annotation@
//MP-MANAGED-ADDED-AREA-ENDING @total-field-annotation@

//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @ATTRIBUTE-total@
    @Column(name="total",   nullable=false,  unique=false)
    @Required
    private java.math.BigDecimal total;	
//MP-MANAGED-UPDATABLE-ENDING


//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @parent-TipoComprobante-comprobante@
    @ManyToOne (fetch=FetchType.LAZY ,optional=false) //remove optional=false to aggragate but leads to a side effect when going directly to the entity: required check is not performed=> if no set DB check constraint is raised...
    @JoinColumn(name="tipo_comprobante_identificador", nullable=false,  unique=false  )
    @ReferenceView ("reference") 
    @DefaultValueCalculator(TipoComprobanteCalculator.class)
    private TipoComprobante tipoComprobanteIdentificador; 
    
//MP-MANAGED-UPDATABLE-ENDING
//children
//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @child-chequeComprobanteViaComprobanteIdentificador-comprobante@
    @OneToMany (targetEntity=sistema_oficial.sistema_oficial.domain.sistemaoficial.Cheque.class, fetch=FetchType.LAZY, mappedBy="comprobanteIdentificador", cascade=CascadeType.REMOVE)//, cascade=CascadeType.ALL)
    private Set <Cheque> chequeComprobanteViaComprobanteIdentificador = new HashSet<Cheque>(); 
   
//MP-MANAGED-UPDATABLE-ENDING
//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @child-cobroFacturaComprobanteViaComprobanteIdentificador-comprobante@
    @OneToMany (targetEntity=sistema_oficial.sistema_oficial.domain.sistemaoficial.CobroFactura.class, fetch=FetchType.LAZY, mappedBy="comprobanteIdentificador", cascade=CascadeType.REMOVE)//, cascade=CascadeType.ALL)
    private Set <CobroFactura> cobroFacturaComprobanteViaComprobanteIdentificador = new HashSet<CobroFactura>(); 
   
//MP-MANAGED-UPDATABLE-ENDING
//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @child-entradaComprobanteViaComprobanteIdentificador-comprobante@
    @OneToMany (targetEntity=sistema_oficial.sistema_oficial.domain.sistemaoficial.Entrada.class, fetch=FetchType.LAZY, mappedBy="comprobanteIdentificador", cascade=CascadeType.REMOVE)//, cascade=CascadeType.ALL)
    private Set <Entrada> entradaComprobanteViaComprobanteIdentificador = new HashSet<Entrada>(); 
   
//MP-MANAGED-UPDATABLE-ENDING
//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @child-otroEgresoComprobanteViaComprobanteIdentificador-comprobante@
    @OneToMany (targetEntity=sistema_oficial.sistema_oficial.domain.sistemaoficial.OtroEgreso.class, fetch=FetchType.LAZY, mappedBy="comprobanteIdentificador", cascade=CascadeType.REMOVE)//, cascade=CascadeType.ALL)
    private Set <OtroEgreso> otroEgresoComprobanteViaComprobanteIdentificador = new HashSet<OtroEgreso>(); 
   
//MP-MANAGED-UPDATABLE-ENDING
//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @child-otroIngresoComprobanteViaComprobanteIdentificador-comprobante@
    @OneToMany (targetEntity=sistema_oficial.sistema_oficial.domain.sistemaoficial.OtroIngreso.class, fetch=FetchType.LAZY, mappedBy="comprobanteIdentificador", cascade=CascadeType.REMOVE)//, cascade=CascadeType.ALL)
    private Set <OtroIngreso> otroIngresoComprobanteViaComprobanteIdentificador = new HashSet<OtroIngreso>(); 
   
//MP-MANAGED-UPDATABLE-ENDING
//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @child-pagoFacturaComprobanteViaComprobanteIdentificador-comprobante@
    @OneToMany (targetEntity=sistema_oficial.sistema_oficial.domain.sistemaoficial.PagoFactura.class, fetch=FetchType.LAZY, mappedBy="comprobanteIdentificador", cascade=CascadeType.REMOVE)//, cascade=CascadeType.ALL)
    private Set <PagoFactura> pagoFacturaComprobanteViaComprobanteIdentificador = new HashSet<PagoFactura>(); 
   
//MP-MANAGED-UPDATABLE-ENDING
//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @child-pagoSalarioComprobanteViaComprobanteIdentificador-comprobante@
    @OneToMany (targetEntity=sistema_oficial.sistema_oficial.domain.sistemaoficial.PagoSalario.class, fetch=FetchType.LAZY, mappedBy="comprobanteIdentificador", cascade=CascadeType.REMOVE)//, cascade=CascadeType.ALL)
    private Set <PagoSalario> pagoSalarioComprobanteViaComprobanteIdentificador = new HashSet<PagoSalario>(); 
   
//MP-MANAGED-UPDATABLE-ENDING
//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @child-salidaComprobanteViaComprobanteIdentificador-comprobante@
    @OneToMany (targetEntity=sistema_oficial.sistema_oficial.domain.sistemaoficial.Salida.class, fetch=FetchType.LAZY, mappedBy="comprobanteIdentificador", cascade=CascadeType.REMOVE)//, cascade=CascadeType.ALL)
    private Set <Salida> salidaComprobanteViaComprobanteIdentificador = new HashSet<Salida>(); 
   
//MP-MANAGED-UPDATABLE-ENDING
//m2m
    /**
    * Default constructor
    */
    public Comprobante() {
    }


    public Integer getIdentificador() {
        return identificador;
    }
	
    public void setIdentificador (Integer identificador) {
        this.identificador =  identificador;
    }
    

//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @GETTER-SETTER-numero@
    public String getNumero() {
        return numero;
    }
	
    public void setNumero (String numero) {
        this.numero =  numero;
    } 
//MP-MANAGED-UPDATABLE-ENDING

//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @GETTER-SETTER-fecha@
    public Timestamp getFecha() {
        return fecha;
    }
	
    public void setFecha (Timestamp fecha) {
        this.fecha =  fecha;
    } 
//MP-MANAGED-UPDATABLE-ENDING

//MP-MANAGED-UPDATABLE-BEGINNING-DISABLE @GETTER-SETTER-total@
    public java.math.BigDecimal getTotal() {
        return total;
    }
	
    public void setTotal (java.math.BigDecimal total) {
        this.total =  total;
    } 
//MP-MANAGED-UPDATABLE-ENDING


    public TipoComprobante getTipoComprobanteIdentificador () {  //
    	return tipoComprobanteIdentificador;
    }
	
    public void setTipoComprobanteIdentificador (TipoComprobante tipoComprobanteIdentificador) {
    	this.tipoComprobanteIdentificador = tipoComprobanteIdentificador;//this.tipoComprobanteIdentificador = tipoComprobante;
    }

    public Set<Cheque> getChequeComprobanteViaComprobanteIdentificador() {
        if (chequeComprobanteViaComprobanteIdentificador == null){
            chequeComprobanteViaComprobanteIdentificador = new HashSet<Cheque>();
        }
        return chequeComprobanteViaComprobanteIdentificador;
    }

    public void setChequeComprobanteViaComprobanteIdentificador (Set<Cheque> chequeComprobanteViaComprobanteIdentificador) {
        this.chequeComprobanteViaComprobanteIdentificador = chequeComprobanteViaComprobanteIdentificador;
    }	
    
    public void addChequeComprobanteViaComprobanteIdentificador (Cheque cheque) {
    	    getChequeComprobanteViaComprobanteIdentificador().add(cheque);
    }
    
    public Set<CobroFactura> getCobroFacturaComprobanteViaComprobanteIdentificador() {
        if (cobroFacturaComprobanteViaComprobanteIdentificador == null){
            cobroFacturaComprobanteViaComprobanteIdentificador = new HashSet<CobroFactura>();
        }
        return cobroFacturaComprobanteViaComprobanteIdentificador;
    }

    public void setCobroFacturaComprobanteViaComprobanteIdentificador (Set<CobroFactura> cobroFacturaComprobanteViaComprobanteIdentificador) {
        this.cobroFacturaComprobanteViaComprobanteIdentificador = cobroFacturaComprobanteViaComprobanteIdentificador;
    }	
    
    public void addCobroFacturaComprobanteViaComprobanteIdentificador (CobroFactura cobroFactura) {
    	    getCobroFacturaComprobanteViaComprobanteIdentificador().add(cobroFactura);
    }
    
    public Set<Entrada> getEntradaComprobanteViaComprobanteIdentificador() {
        if (entradaComprobanteViaComprobanteIdentificador == null){
            entradaComprobanteViaComprobanteIdentificador = new HashSet<Entrada>();
        }
        return entradaComprobanteViaComprobanteIdentificador;
    }

    public void setEntradaComprobanteViaComprobanteIdentificador (Set<Entrada> entradaComprobanteViaComprobanteIdentificador) {
        this.entradaComprobanteViaComprobanteIdentificador = entradaComprobanteViaComprobanteIdentificador;
    }	
    
    public void addEntradaComprobanteViaComprobanteIdentificador (Entrada entrada) {
    	    getEntradaComprobanteViaComprobanteIdentificador().add(entrada);
    }
    
    public Set<OtroEgreso> getOtroEgresoComprobanteViaComprobanteIdentificador() {
        if (otroEgresoComprobanteViaComprobanteIdentificador == null){
            otroEgresoComprobanteViaComprobanteIdentificador = new HashSet<OtroEgreso>();
        }
        return otroEgresoComprobanteViaComprobanteIdentificador;
    }

    public void setOtroEgresoComprobanteViaComprobanteIdentificador (Set<OtroEgreso> otroEgresoComprobanteViaComprobanteIdentificador) {
        this.otroEgresoComprobanteViaComprobanteIdentificador = otroEgresoComprobanteViaComprobanteIdentificador;
    }	
    
    public void addOtroEgresoComprobanteViaComprobanteIdentificador (OtroEgreso otroEgreso) {
    	    getOtroEgresoComprobanteViaComprobanteIdentificador().add(otroEgreso);
    }
    
    public Set<OtroIngreso> getOtroIngresoComprobanteViaComprobanteIdentificador() {
        if (otroIngresoComprobanteViaComprobanteIdentificador == null){
            otroIngresoComprobanteViaComprobanteIdentificador = new HashSet<OtroIngreso>();
        }
        return otroIngresoComprobanteViaComprobanteIdentificador;
    }

    public void setOtroIngresoComprobanteViaComprobanteIdentificador (Set<OtroIngreso> otroIngresoComprobanteViaComprobanteIdentificador) {
        this.otroIngresoComprobanteViaComprobanteIdentificador = otroIngresoComprobanteViaComprobanteIdentificador;
    }	
    
    public void addOtroIngresoComprobanteViaComprobanteIdentificador (OtroIngreso otroIngreso) {
    	    getOtroIngresoComprobanteViaComprobanteIdentificador().add(otroIngreso);
    }
    
    public Set<PagoFactura> getPagoFacturaComprobanteViaComprobanteIdentificador() {
        if (pagoFacturaComprobanteViaComprobanteIdentificador == null){
            pagoFacturaComprobanteViaComprobanteIdentificador = new HashSet<PagoFactura>();
        }
        return pagoFacturaComprobanteViaComprobanteIdentificador;
    }

    public void setPagoFacturaComprobanteViaComprobanteIdentificador (Set<PagoFactura> pagoFacturaComprobanteViaComprobanteIdentificador) {
        this.pagoFacturaComprobanteViaComprobanteIdentificador = pagoFacturaComprobanteViaComprobanteIdentificador;
    }	
    
    public void addPagoFacturaComprobanteViaComprobanteIdentificador (PagoFactura pagoFactura) {
    	    getPagoFacturaComprobanteViaComprobanteIdentificador().add(pagoFactura);
    }
    
    public Set<PagoSalario> getPagoSalarioComprobanteViaComprobanteIdentificador() {
        if (pagoSalarioComprobanteViaComprobanteIdentificador == null){
            pagoSalarioComprobanteViaComprobanteIdentificador = new HashSet<PagoSalario>();
        }
        return pagoSalarioComprobanteViaComprobanteIdentificador;
    }

    public void setPagoSalarioComprobanteViaComprobanteIdentificador (Set<PagoSalario> pagoSalarioComprobanteViaComprobanteIdentificador) {
        this.pagoSalarioComprobanteViaComprobanteIdentificador = pagoSalarioComprobanteViaComprobanteIdentificador;
    }	
    
    public void addPagoSalarioComprobanteViaComprobanteIdentificador (PagoSalario pagoSalario) {
    	    getPagoSalarioComprobanteViaComprobanteIdentificador().add(pagoSalario);
    }
    
    public Set<Salida> getSalidaComprobanteViaComprobanteIdentificador() {
        if (salidaComprobanteViaComprobanteIdentificador == null){
            salidaComprobanteViaComprobanteIdentificador = new HashSet<Salida>();
        }
        return salidaComprobanteViaComprobanteIdentificador;
    }

    public void setSalidaComprobanteViaComprobanteIdentificador (Set<Salida> salidaComprobanteViaComprobanteIdentificador) {
        this.salidaComprobanteViaComprobanteIdentificador = salidaComprobanteViaComprobanteIdentificador;
    }	
    
    public void addSalidaComprobanteViaComprobanteIdentificador (Salida salida) {
    	    getSalidaComprobanteViaComprobanteIdentificador().add(salida);
    }
    



//MP-MANAGED-ADDED-AREA-BEGINNING @implementation@
//MP-MANAGED-ADDED-AREA-ENDING @implementation@

}
